#include "BonusCongelar.h"

#include "Pacman.h"
#include "EscenarioModelo.h"
#include "Juego.h"
#include <SDL.h>

BonusCongelar::BonusCongelar(Punto* unPunto,unsigned int unRadio, bool vivo) : BonusModel(unPunto,unRadio,vivo){

}

void BonusCongelar::colisionarConPacman(ObjetoVivo* unObjetoVivo) {

	Pacman* pacman = (Pacman*)unObjetoVivo;
	Pacman* pacmanEnemigo;

	if(EscenarioModelo::getEscenario()->getPacmanJugador1()->equals(pacman)){
		pacmanEnemigo = EscenarioModelo::getEscenario()->getPacmanJugador2(); 
	}else{
		pacmanEnemigo = EscenarioModelo::getEscenario()->getPacmanJugador1(); 
	}

    pacmanEnemigo->getEstrategiaMovimiento()->setVelocidad(0);

    Uint32* argumentos = new Uint32[2];
    memcpy(&argumentos[0],&this->duracionEfecto,sizeof(Uint32));
    memcpy(&argumentos[1],&pacmanEnemigo,sizeof(Uint32));
    SDL_Thread * thread = SDL_CreateThread(BonusCongelar::volverAVelocidadOriginal, argumentos);

	// Se agrega el thread a la lista de thread para luego terminarlo si queda vivo.
	Juego::listaThreads->agregar(thread);

	this->matar();
}

int BonusCongelar::volverAVelocidadOriginal(void* data){
    
    Uint32* arreglo = (Uint32*)data;

    Uint32 delay = (Uint32)arreglo[0];
    Pacman* pacman = (Pacman*)arreglo[1];

    SDL_Delay(delay);
    
    pacman->getEstrategiaMovimiento()->volverAVelocidadOrigonal();

    return 0;
    delete[] arreglo ;
}

void BonusCongelar::colisionarConFantasma(ObjetoVivo* unObjetoVivo){

}

BonusCongelar::~BonusCongelar(){
}
